#ifndef AVALON_REVERSEDECODER_HPP
#define AVALON_REVERSEDECODER_HPP
#include "Avalon/Codecs/Decoder.hpp"
#include "Avalon/CodecsTests/CodecsTests.hpp"

namespace Avalon {
namespace Codecs {
namespace Tests {

  /*! \class ReverseDecoder
   *  \brief Reverses a data source.
   *  \author Kamal Mansouri <kranar@hotmail.com>
   */
  class ReverseDecoder : public Decoder {
    public:

      //! Constructs a ReverseDecoder.
      ReverseDecoder();

      virtual ~ReverseDecoder();

      virtual bool IsDecodeInPlaceSupported();

      virtual void Decode(const void* source, int sourceSize,
        void* destination, int destinationSize, int* decodedSize = NULL);

      virtual void Decode(const void* source, int sourceSize,
        IO::Buffer* destination, int* decodedSize = NULL);

      using Decoder::Decode;

      using Decoder::DecodeInPlace;
  };
}
}
}

#endif // AVALON_REVERSEDECODER_HPP
